﻿// 中文注释：该文件实现了ChannelRecordWidget类的成员函数，包括构造函数和绘制函数
#include "ChannelRecordWidget.h"

/**
 * @brief 构造函数，初始化通道记录部件
 * @param minX X轴最小值（数据范围）
 * @param maxX X轴最大值（数据范围）
 * @param minY Y轴最小值（数据范围）
 * @param maxY Y轴最大值（数据范围）
 * @param parent 父窗口部件指针
 * 初始化成员变量，设置数据坐标范围
 */
ChannelRecordWidget::ChannelRecordWidget(int minX, int maxX, int minY, int maxY, QWidget *parent)
    :QWidget(parent),
      m_minX(minX),    // 初始化X轴最小值
      m_maxX(maxX),    // 初始化X轴最大值
      m_minY(minY),    // 初始化Y轴最小值
      m_maxY(maxY)     // 初始化Y轴最大值
{
    // 构造函数体为空，仅初始化成员变量
}

/**
 * @brief 绘制事件处理函数，用于在部件上绘制折线和点
 * @param event 绘制事件对象指针
 * 生成随机数据点，绘制蓝色折线图和红色散点图
 */
void ChannelRecordWidget::paintEvent(QPaintEvent *event)
{
    // 创建 QPainter 对象，用于绘制操作
    QPainter painter(this);
    // 开始本地绘制，使用底层图形API提高性能
    painter.beginNativePainting();

    // 计算 X 轴的缩放比例，将数据坐标转换为屏幕坐标
    double xLineScale = (double)(width()) / m_maxX;
    // 计算 Y 轴的缩放比例，将数据坐标转换为屏幕坐标
    double yLineScale = (double)(height()) / m_maxY;
    // 创建用于存储要绘制的点的向量
    QVector<QPointF> points;
    // 生成一系列随机点（模拟通道数据）
    for(int i=0; i<m_maxX; ++i)
    {
        // 计算点的X坐标（数据坐标*缩放比例）
        double x = i * xLineScale;
        // 生成随机Y坐标（0到m_maxY之间）并计算屏幕坐标
        double y = (qrand() % m_maxY) * yLineScale;
        // 将点添加到向量中
        points.push_back(QPointF(x, y));
    }
    // 设置画笔为蓝色，线宽为1像素（用于绘制折线）
    painter.setPen(QPen(Qt::blue, 1));
    // 绘制折线图
    painter.drawPolyline(points);
    // 设置画笔为红色，线宽为4像素（用于绘制点）
    painter.setPen(QPen(Qt::red, 4));
    // 绘制散点图
    painter.drawPoints(points);
    // 结束本地绘制
    painter.endNativePainting();
}
